package cn.explink.eap.web.system.service;

import java.util.Map;
import java.util.Set;

import cn.explink.eap.core.common.service.CommonService;
import cn.explink.eap.web.system.pojo.base.TSFunction;
import cn.explink.eap.web.system.pojo.base.TSRole;
import cn.explink.eap.web.system.pojo.base.TSType;
import cn.explink.eap.web.system.pojo.base.TSTypegroup;
import cn.explink.eap.web.system.pojo.base.TSUser;

/**
 *
 * @author 张代浩
 *
 */
public interface SystemService extends CommonService {
	/**
	 * 登陆用户检查
	 *
	 * @param user
	 * @return
	 * @throws Exception
	 */
	public TSUser checkUserExits(TSUser user) throws Exception;

	/**
	 * 日志添加
	 *
	 * @param LogContent
	 *            内容
	 * @param loglevel
	 *            级别
	 * @param operatetype
	 *            类型
	 * @param TUser
	 *            操作人
	 */
	public void addLog(String LogContent, Short loglevel, Short operatetype);

	/**
	 * 根据类型编码和类型名称获取Type,如果为空则创建一个
	 *
	 * @param typecode
	 * @param typename
	 * @return
	 */
	public TSType getType(String typecode, String typename, TSTypegroup tsTypegroup);

	/**
	 * 根据类型分组编码和名称获取TypeGroup,如果为空则创建一个
	 *
	 * @param typecode
	 * @param typename
	 * @return
	 */
	public TSTypegroup getTypeGroup(String typegroupcode, String typgroupename);

	/**
	 * 根据用户ID 和 菜单Id 获取 具有操作权限的按钮Codes
	 *
	 * @param roleId
	 * @param functionId
	 * @return
	 */
	public Set<String> getOperationCodesByUserIdAndFunctionId(String userId, String functionId);

	/**
	 * 根据角色ID 和 菜单Id 获取 具有操作权限的按钮Codes
	 *
	 * @param roleId
	 * @param functionId
	 * @return
	 */
	public Set<String> getOperationCodesByRoleIdAndFunctionId(String roleId, String functionId);

	/**
	 * 根据编码获取字典组
	 *
	 * @param typegroupCode
	 * @return
	 */
	public TSTypegroup getTypeGroupByCode(String typegroupCode);

	/**
	 * 对数据字典进行缓存
	 */
	public void initAllTypeGroups();

	/**
	 * 刷新字典缓存
	 *
	 * @param type
	 */
	public void refleshTypesCach(TSType type);

	/**
	 * 刷新字典分组缓存
	 */
	public void refleshTypeGroupCach();

	/**
	 * 刷新菜单
	 *
	 * @param id
	 */
	public void flushRoleFunciton(String id, TSFunction newFunciton);

	/**
	 *
	 * @Title: setUserToNullByUserId
	 * @Description: 解决用户与log日志的关联
	 * @author 孟凡岭
	 * @param @param id
	 * @return void 返回类型
	 * @throws
	 */
	public void setUserToNullByUserId(String id);

	/**
	 * 
	 * @Title: getRoleByPage
	 * @Description: 分页获取角色
	 * @author 孟凡岭
	 * @param @param role
	 * @param @param pageNum
	 * @param @param pageSize
	 * @param @return
	 * @return Map<String,Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> getRoleByPage(TSRole role, int pageNum, int pageSize);

}
